/**
 * 
 */
package br.skytef.stmanager.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Timestamp;

import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.read.biff.BiffException;
import br.skytef.stmanager.daos.ClienteDAO;
import br.skytef.stmanager.entities.ClienteEntity;

/**
 * @author Ivam Henrique Marques dos Santos
 *         email: ivam.santos@skytef.com.br
 *         skype: ivam.santos.skytef
 *         telefone: +55 11 96214-7543
 */
public class PlanFinanceiro {

	private static Workbook planilha;
	Sheet sheet;

	private String  mensagemErro;
	public String getMensagemErro() {return mensagemErro;}
	public void setMensagemErro(String mensagemErro) {this.mensagemErro = mensagemErro;}

	private Timestamp dataInclusao;
	public Timestamp getDataInclusao() {return dataInclusao;}
	public void setDataInclusao(Timestamp dataInclusao) {this.dataInclusao = dataInclusao;}

	private String parceiro;
	public String getParceiro() {return parceiro;}
	public void setParceiro(String parceiro) {this.parceiro = parceiro;}

	private String servico;
	public String getServico() {return servico;}
	public void setServico(String servico) {this.servico = servico;}

	private int qtdLojas;
	public int getQtdLojas() {return qtdLojas;}
	public void setQtdLojas(int qtdLojas) {this.qtdLojas = qtdLojas;}

	private static String linhaErrada;
	public static String getLinhaErrada() {return linhaErrada;}

	public PlanFinanceiro(InputStream is) throws BiffException, IOException{
		WorkbookSettings workbookSettings = new WorkbookSettings();
		workbookSettings.setEncoding( "Cp1252" );
		planilha = Workbook.getWorkbook(is , workbookSettings);
		sheet = planilha.getSheet(0);
	}

	public boolean validar(){
		try{
			if(!sheet.getCell(0,0).getContents().toUpperCase().trim().equals("LOJA")){
				mensagemErro = "Erro: Coluna \"LOJA\"";
				return false;
			}		
			else if(!sheet.getCell(1,0).getContents().toUpperCase().trim().equals("NOME FANTASIA")){
				mensagemErro = "Erro: Coluna \"NOME FANTASIA\"";
				return false;
			}
			else if(!sheet.getCell(2,0).getContents().toUpperCase().trim().equals("CNPJ")){
				mensagemErro = "Erro: Coluna \"CNPJ\"";
				return false;
			}
			else if(!sheet.getCell(3,0).getContents().toUpperCase().trim().equals("LOJAS")){
				mensagemErro = "Erro: Coluna \"LOJAS\"";
				return false;
			}
			else if(!sheet.getCell(4,0).getContents().toUpperCase().trim().equals("SERVIÇO")){
				mensagemErro = "Erro: Coluna \"SERVIÇO\"";
				return false;
			}
			else if(!sheet.getCell(5,0).getContents().toUpperCase().trim().equals("VALOR")){
				mensagemErro = "Erro: Coluna \"VALOR\"";
				return false;
			}else if(!sheet.getCell(6,0).getContents().toUpperCase().trim().equals("INÍCIO")){
				mensagemErro = "Erro: Coluna \"INÍCIO\"";
				return false;
			}else if(!sheet.getCell(7,0).getContents().toUpperCase().trim().equals("PARCEIRO")){
				mensagemErro = "Erro: Coluna \"PARCEIRO\"";
				return false;
			}else 
				return true;
		}catch (Exception e){
			setMensagemErro("Planilha inválida");
			return false;
		}
	}

	public ClienteEntity importarlinha(int i){

		ClienteEntity ce;
		try{
			linhaErrada = sheet.getRowView(i).toString();
			long cnpj = new Cnpj().StringParaInteiro(sheet.getCell(2,i).getContents());
			ce = new ClienteDAO().buscarCliente(cnpj);
			if(ce == null){
				ce = new ClienteEntity();
				ce.setRazaoSocial(sheet.getCell(0,i).getContents().toUpperCase().trim());
				ce.setNomeFantasia(sheet.getCell(1,i).getContents().toUpperCase().trim());
				ce.setCnpj(cnpj);
				ce.setQtdLojas(StrInt(sheet.getCell(3,i).getContents()));
				setQtdLojas(ce.getQtdLojas());
				ce.setValorFaturado(StrDoble(sheet.getCell(5,i).getContents()));
			}else{
				ce.setValorFaturado(StrDoble(sheet.getCell(5,i).getContents()));
				setQtdLojas(StrInt(sheet.getCell(3,i).getContents()));

			}	
			setServico(sheet.getCell(4,i).getContents());
			try{
				setDataInclusao(Timestamp.valueOf(sheet.getCell(6,i).getContents()));
			}catch (Exception e){
				setDataInclusao(null);
			}
			setParceiro(sheet.getCell(7,i).getContents());
			return ce;
		}catch (Exception e){
			return null;
		}

	}

	public int qtlinha(){
		Sheet sheet = planilha.getSheet(0);
		return sheet.getRows();
	}

	public double StrDoble(String valor){
		double num;
		try {
			valor = valor.replace(",",".");
			num = Double.parseDouble(valor);
		} catch (Exception e) {
			num = 0;
		}
		return num;
	}
	public int StrInt(String valor){
		int num;
		try {
			num = Integer.parseInt(valor);
		} catch (Exception e) {
			num = 0;
		}		
		return num;
	}
}
